Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: 手语   发起时间: 2009-09-09 21:35 下午   回复: 3

Print Search
帖子排序:    
   2009-09-09, 21:35 下午
neilhsu 离线,最后访问时间: 2009/12/23 17:02:23 手语

发帖数前10位
男
注册: 2008-06-06
发 贴: 73
[加急求助] WinDBG扩展开发 - 如何在WinDBG扩展DLL中控制被调试进程的停止和继续执行
Reply Quote

请教各位有写WinDBG扩展命令丰富经验的兄弟们,我有个问题一整天了也解决不了。

事情是这样的

我在开发一个做自动调试功能的WinDBG扩展,在CDB.exe执行扩展命令后建立一个独立的线程用来控制被调试程序的暂时停止和继续执行。其间会做一些Symbol解析之类的工作(被调试程序运行时DbgEng无法解析Symbol)。

注意现在CDB进程中有两个线程了:1个是CDB主线程,用来处理各种Debug Event;另1个是我创建的线程用来控制被调试程序的暂时停止和继续执行。

暂时停止:我用DebuBreakProcess()暂停被调试进程

继续执行:这是我用来继续执行的代码,但是不起作用。必须手动在CDB控制台窗口输入任意键后,被调试进程才能恢复执行。

hr = control->Execute( DEBUG_OUTCTL_ALL_CLIENTS, "g;", NULL );   //希望通过执行g命令使进程恢复执行

如果这时才CDB窗口输入g命令并执行,会显示

Debuggee already running error in 'g'

说明我在"继续执行"一步中用Execute()执行的g命令已经生效。只是CDB不放开被调试进程。

 

有解决办法吗?什么原因造成CDB不放开被调试进程。

 

这个问题已经折磨我一整天了。

老雷,王宇,MJ,各位兄台,有空的话帮忙分析一下原因。感激不尽。


鸿鹄安知燕雀之志
IP 地址: 已记录   报告
   2009-09-09, 21:37 下午
neilhsu 离线,最后访问时间: 2009/12/23 17:02:23 手语

发帖数前10位
男
注册: 2008-06-06
发 贴: 73
Re: [加急求助] WinDBG扩展开发 - 如何在WinDBG扩展DLL中控制被调试进程的停止和继续执行
Reply Quote

不好意思,忘了说了。

control是IDebugControl的接口指针。


鸿鹄安知燕雀之志
IP 地址: 已记录   报告
   2009-09-10, 08:53 上午
aeezguo 离线,最后访问时间: 2010/4/21 7:25:59 guozf

发帖数前10位
男
注册: 2008-12-06
HK
发 贴: 68
Re: [加急求助] WinDBG扩展开发 - 如何在WinDBG扩展DLL中控制被调试进程的停止和继续执行
Reply Quote
我怀疑control->Execute( DEBUG_OUTCTL_ALL_CLIENTS, "g;", NULL )这个函数只能在主线程中调用.
IP 地址: 已记录   报告
   2009-09-10, 11:44 上午
neilhsu 离线,最后访问时间: 2009/12/23 17:02:23 手语

发帖数前10位
男
注册: 2008-06-06
发 贴: 73
Re: [加急求助] WinDBG扩展开发 - 如何在WinDBG扩展DLL中控制被调试进程的停止和继续执行
Reply Quote
谢谢guozf。
问题已经解决了。
确实如你所说,这个调用只能在CDB主线程调用。

原因是这样的,CDB主线程在等待用户输入。即使其他线程执行了G命令,CDB主线程仍然回不到DebugEvent循环。所以就一直挂在那里,一直等待有人输入,哪怕只是一个回车。

再次感谢。
鸿鹄安知燕雀之志
IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » [加急求助] WinDBG扩展开发 - 如何在WinDBG扩展DLL中控制被调试进程的停止和继续执行

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.